#include<bits/stdc++.h>
using namespace std;
const int MAXN=100010,INF=100000000;
int n,cnt,ans,root,ret;
struct treap
{
	int lc,rc,key,pri,siz,val;
}a[MAXN];
void push_up(int o)
{
	a[o].siz=a[a[o].lc].siz+a[a[o].rc].siz+a[o].val;
	return;
}
void lturn(int &o)
{
	int t=a[o].rc;
	a[o].rc=a[t].lc;
	a[t].lc=o;
	a[t].siz=a[o].siz;
	push_up(o);
	o=t;
	return;
}
void rturn(int &o)
{
	int t=a[o].lc;
	a[o].lc=a[t].rc;
	a[t].rc=o;
	a[t].siz=a[o].siz;
	push_up(o);
	o=t;
	return;
}
void insert(int &o,int k)
{
	if(!o)
	{
		o=++cnt;
		a[o]=(treap){0,0,k,rand(),1,1};
		return;
	}
	++a[o].siz;
	if(k==a[o].key)++a[o].val;
	else if(k<a[o].key)
	{
		insert(a[o].lc,k);
		if(a[o].pri<a[a[o].lc].pri)rturn(o);
	}
	else
	{
		insert(a[o].rc,k);
		if(a[o].pri<a[a[o].rc].pri)lturn(o);
	}
	return;
}
void del(int &o,int k)
{
	if(!o)return;
	if(k==a[o].key)
	{
		if(a[o].val>1)
		{
			--a[o].siz;
			--a[o].val;
		}
		else if(!(a[o].lc*a[o].rc))o=a[o].lc+a[o].rc;
		else if(a[a[o].lc].pri<a[a[o].rc].pri)
		{
			lturn(o);
			del(o,k);
		}
		else
		{
			rturn(o);
			del(o,k);
		}
	}
	else if(k<a[o].key)
	{
		--a[o].siz;
		del(a[o].lc,k);
	}
	else
	{
		--a[o].siz;
		del(a[o].rc,k);
	}
	return;
}
int query_rank(int o,int k)
{
	if(!o)return 0;
	if(k<a[o].key)return query_rank(a[o].lc,k);
	if(k==a[o].key)return a[a[o].lc].siz+1;
	return a[a[o].lc].siz+a[o].val+query_rank(a[o].rc,k);
}
int query_num(int o,int k)
{
	if(!o)return 0;
	if(k<=a[a[o].lc].siz)return query_num(a[o].lc,k);
	if(k<=a[a[o].lc].siz+a[o].val)return a[o].key;
	return query_num(a[o].rc,k-a[a[o].lc].siz-a[o].val);
}
void query_pro(int o,int k)
{
	if(!o)return;
	if(k<=a[o].key)query_pro(a[o].lc,k);
	else
	{
		ret=a[o].key;
		query_pro(a[o].rc,k);
	}
	return;
}
void query_sub(int o,int k)
{
	if(!o)return;
	if(k>=a[o].key)query_sub(a[o].rc,k);
	else
	{
		ret=a[o].key;
		query_sub(a[o].lc,k);
	}
	return;
}
int main()
{
	scanf("%d",&n);
	srand(n);
	int t1,t2;
	for(int i=1;i<=n;++i)
	{
		scanf("%d%d",&t1,&t2);
		if(t1==1)insert(root,t2);
		else if(t1==2)del(root,t2);
		else if(t1==3)printf("%d\n",query_rank(root,t2));
		else if(t1==4)printf("%d\n",query_num(root,t2));
		else if(t1==5)
		{
			ret=-INF;
			query_pro(root,t2);
			printf("%d\n",ret);
		}
		else
		{
			ret=INF;
			query_sub(root,t2);
			printf("%d\n",ret);
		}
	}
	return 0;
}
